iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
自我挑戰組

HomeLab 30天,胡搞瞎搞亂弄一通。系列 第 7

Day07,搭配gitlab-ci執行image auto build

  • 分享至 

  • xImage
  •  

正文

今天要設定gitlab上的專案,讓他們能夠在git commit時自動打包成docker image並存放於gitlab registry。

目前gitlab上面都有提供許多shared runner,舉凡像是一些無關緊要、無機敏性考量的內容,都可以直接透過官方提供的shared runner 來進行pipeline,這次的homelab也會使用這個shared runner 進行auto build的動作。

反之,如果是一些private repository,有機敏性考量、有對應網路環境限制(如地端自動化佈署等等......),那就是透過sepcific runners於自己的機器中建置與維護專用的runner,符合當下環境的需求,且不用與陌生人競爭資源,安裝與註冊的流程上面&官網介紹的都算詳細,看大家如何選擇而已。

gitlab repository左邊選單 Settings > CI/CD > 展開 Runners,從圖片上我們可以看到許多shared runners,而runner下方許多藍色的tag則是告知你該runner的使用情境/環境。

下圖是官方所展示的gitlab runner execution flow

那如何觸發runner運作呢?就是要搭配.gitlab-ci.yml,當該檔案存在於gitlab repository且內容的撰寫符合官方所規範的方式,就可以觸發gitlab runner來工作啦。

那我這邊就是簡單的修改一下官方範本,撰寫一份.gitlab-ci.yml 如下,使用的是docker in docker(dind)的方式:

docker-build:
  image: docker:latest
  stage: build
  services:
    - docker:dind
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
  script:
    - |
      if [[ "$CI_COMMIT_BRANCH" == "master" ]]; then
        tag=":dev"
      else
        tag=":$CI_COMMIT_REF_NAME"
      fi
    - docker build -t "$CI_REGISTRY_IMAGE${tag}" .
    - docker push "$CI_REGISTRY_IMAGE${tag}"
  tags:
    - docker
  only:
    - master
    - /^Release-v[0-9]+(?:.[0-9]+)+$/

gitlab runner中其實預先定義了許多變數,與當下gitlab的使用者/repo/環境都息息相關,初學者不熟悉有哪些變數可以用的話不妨在runner中執行export將變數輸出看一看,或是花點時間認真閱讀官方文件看看有哪些是自己需要的。

.gitlab-ci.yml的內容可以搭配左邊選單CI/CD > pipeline > 畫面右上角CI Lint做檢驗。會告訴你語法是否正確,預計如何執行pipeline。

執行的過程,可以點選pipeline查看Console,那這邊的邏輯就是master主線會將image打包成dev 而/^Release-v[0-9]+(?:.[0-9]+)+$/則是只要是這樣的名字就將image如此打包,如下圖所示。

那這樣子我前幾天寫的兩個應用都完成Auto Build囉,明天可以開始規劃基礎環境建設了。

閒聊

gitlab官方的免費仔,在使用gitlab CI時是有Quota限制的,每個月只能執行400分鐘的pipeline(open source則不受限制),如果超過就需要升級會員或是購買額外時間(在user settings那邊有詳細的usage quotas可以參閱唷)。


上一篇
Day06,將昨日的靜態頁面打包
下一篇
Day08,先介紹一下預備的家中環境
系列文
HomeLab 30天,胡搞瞎搞亂弄一通。30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言